package com.kaifamiao.charstreams;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.Arrays;

/**
 * 根据流读写单位将流分为:
 * 1、字节流: 以字节为读写单位
 * 2、字符流: 以字符为读写单位
 */
public class ReaderTest {

    public static void main(String[] args) throws IOException {

        System.out.println( "默认字符编码: " + Charset.defaultCharset() );

        String pathname = "D:/test/ReaderTest.java";
        // 根据`默认字符编码`创建一个可以读取指定文件内容的字符输入流
        Reader r = new FileReader( pathname );

        // 从字符输入流中读取并返回单个字符 (若到达流末尾则返回-1)
        int ch = r.read();
        System.out.println( (char)ch );
        ch = r.read();
        System.out.println( (char)ch );

        // 用于记录实际读取到的字符数
        int n ;
        // 用于缓存从字符输入流中读取的字符们
        final char[] buffer = new char[32];

        // 从字符输入流中读取一批字符到数组中并返回实际读取到的字符数 (若到达流末尾则返回-1)
        while( ( n = r.read( buffer ) ) != -1 ) {
            // 根据 buffer 中 [ 0, n ) 之间的字符构造字符串
            String s = new String( buffer , 0, n );
            System.out.print( s );
        }

        r.close();
    }

}
